package negocio;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

import beans.ProductoVO;

	
@Entity
@Table(name="productos")
@Inheritance(strategy=InheritanceType.JOINED)
public class Producto implements Serializable 
{
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id_producto", nullable=false)
	private int id_producto;
	
	@Column(name="nombre", nullable=true, unique=true)
	private String nombre;
	
	@Column(name="descripcion", nullable=true)
	private String descripcion;
	
	@Column(name="precioVenta", nullable=true)
	private float precioVenta;
	
	@Column(name="tipo", nullable=false)
	private String tipo;
	
	
	public int getId_producto() {
		return id_producto;
	}
	public void setId_producto(int id_producto) {
		this.id_producto = id_producto;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public float getPrecioVenta() {
		return precioVenta;
	}
	public void setPrecioVenta(float precioVenta) {
		this.precioVenta = precioVenta;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	@Override
	public String toString() {
		return "Producto [id_producto=" + id_producto + ", nombre=" + nombre
				+ ", descripcion=" + descripcion + ", precioVenta="
				+ precioVenta + ", tipo=" + tipo + "]";
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((descripcion == null) ? 0 : descripcion.hashCode());
		result = prime * result + id_producto;
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		result = prime * result + Float.floatToIntBits(precioVenta);
		result = prime * result + ((tipo == null) ? 0 : tipo.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Producto other = (Producto) obj;
		if (descripcion == null) {
			if (other.descripcion != null)
				return false;
		} else if (!descripcion.equals(other.descripcion))
			return false;
		if (id_producto != other.id_producto)
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		if (Float.floatToIntBits(precioVenta) != Float
				.floatToIntBits(other.precioVenta))
			return false;
		if (tipo == null) {
			if (other.tipo != null)
				return false;
		} else if (!tipo.equals(other.tipo))
			return false;
		return true;
	}
	
	
	public void buildFromVO(ProductoVO productoVO)
	{
		this.descripcion = productoVO.getDescripcion();
		this.nombre = productoVO.getNombre();
		this.precioVenta = productoVO.getPrecioVenta();
		this.tipo = productoVO.getTipo();
	}

	public ProductoVO getVO()
	{
		ProductoVO prodVO = new ProductoVO(
				this.getNombre(), 
				this.getDescripcion(), 
				this.getPrecioVenta(), 
				this.getTipo());
		return prodVO;
	}
}
